package com.chuangsi.common.utils;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class SimpleHtmlExtractor {

    /**
     * 提取字段值
     * @param html HTML字符串
     * @param fieldName 字段名（如"产品名称"、"延保期限"）
     * @return 字段对应的完整值
     */
    public static String extract(String html, String fieldName) {
        if (html == null || fieldName == null) {
            return null;
        }

        try {
            Document doc = Jsoup.parse(html);

            // 查找包含字段名的所有元素
            Elements elements = doc.getElementsContainingOwnText(fieldName);

            for (Element element : elements) {
                // 获取包含该字段的完整段落
                Element paragraph = getContainingParagraph(element);
                if (paragraph != null) {
                    String paragraphText = paragraph.text();

                    // 从段落文本中提取字段值
                    String value = extractValueFromParagraph(paragraphText, fieldName);
                    if (value != null && !value.trim().isEmpty()) {
                        return value;
                    }
                }
            }

            return null;

        } catch (Exception e) {
            return null;
        }
    }

    /**
     * 获取包含元素的段落
     */
    private static Element getContainingParagraph(Element element) {
        Element current = element;
        while (current != null) {
            if ("p".equals(current.tagName())) {
                return current;
            }
            current = current.parent();
        }
        return null;
    }

    /**
     * 从段落文本中提取字段值
     */
    private static String extractValueFromParagraph(String paragraphText, String fieldName) {
        // 构建正则表达式：字段名 + 分隔符 + 值（直到段落结束或下一个字段开始）
        String regex = fieldName + "[：:]\\s*([^\\s].*?)(?=\\s*$|\\s*(?:合同号|客服电话|个人客户姓名|通讯地址|证件类型|证件号码|联系电话|品牌|车型|排量|车辆识别号|发动机号|新车发票日期|里程表数|经销商名称|经销商地址|名称|地址|客服热线|产品名称|延保期限|合同款项|客户选择)[：:])";

        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(paragraphText);

        if (matcher.find()) {
            return matcher.group(1).trim();
        }

        // 如果上面的正则没匹配到，使用更简单的方法
        return extractSimpleValue(paragraphText, fieldName);
    }

    /**
     * 简单提取方法：直接获取字段名后面的内容
     */
    private static String extractSimpleValue(String paragraphText, String fieldName) {
        int fieldIndex = paragraphText.indexOf(fieldName);
        if (fieldIndex >= 0) {
            // 找到字段名后面的内容
            String afterField = paragraphText.substring(fieldIndex + fieldName.length());

            // 去除开头的冒号和空格
            afterField = afterField.replaceAll("^[：:\\s]+", "");

            // 如果还有下一个字段，截取到下一个字段之前
            String[] nextFields = {"合同号", "客服电话", "个人客户姓名", "通讯地址", "证件类型", "证件号码", "联系电话",
                    "品牌", "车型", "排量", "车辆识别号", "发动机号", "新车发票日期", "里程表数",
                    "经销商名称", "经销商地址", "名称", "地址", "客服热线", "产品名称", "延保期限", "合同款项", "客户选择"};

            int minNextIndex = -1;
            for (String nextField : nextFields) {
                if (!nextField.equals(fieldName)) {
                    int index = afterField.indexOf(nextField);
                    if (index >= 0 && (minNextIndex == -1 || index < minNextIndex)) {
                        minNextIndex = index;
                    }
                }
            }

            if (minNextIndex >= 0) {
                return afterField.substring(0, minNextIndex).trim();
            }

            return afterField.trim();
        }

        return null;
    }
}
